]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Disable the login button when there is no input
authorStéphane Démurget <stephane.demurget@free.fr>
Thu, 1 Nov 2012 15:19:17 +0000 (16:19 +0100)
committerAllan Day <allanpday@gmail.com>
Mon, 5 Nov 2012 10:17:46 +0000 (10:17 +0000)
You can't login until something has been entered in the password field.
We should therefore make the login button insensitive until you have
entered some text.

https://bugzilla.gnome.org/show_bug.cgi?id=687112

js/gdm/loginDialog.js
js/ui/unlockDialog.js

index b3240fc48fddcc0722f35e3bfa52729b7a97d482..ffd20a01f51ce405f68e6a42fc7a3f17b6beb084 100644 (file)
@@ -731,6 +731,7 @@ const LoginDialog = new Lang.Class({
                               x_align: St.Align.START });
         this._promptEntry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
                                            can_focus: true });
+        this._promptEntryTextChangedId = 0;
         this._promptBox.add(this._promptEntry,
                             { expand: true,
                               x_fill: true,
@@ -901,21 +902,31 @@ const LoginDialog = new Lang.Class({
     _showPrompt: function() {
         let hold = new Batch.Hold();
 
-        let buttons = [{ action: Lang.bind(this, this.cancel),
-                         label: _("Cancel"),
-                         key: Clutter.Escape },
-                       { action: Lang.bind(this, function() {
-                                     hold.release();
-                                 }),
-                         label: C_("button", "Sign In"),
-                         default: true }];
+        let cancelButtonInfo = { action: Lang.bind(this, this.cancel),
+                                 label: _("Cancel"),
+                                 key: Clutter.Escape };
+        let okButtonInfo = { action: Lang.bind(this, function() {
+                                         hold.release();
+                                     }),
+                             label: C_("button", "Sign In"),
+                             default: true };
 
         let tasks = [function() {
                          return this._fadeInPrompt();
                      },
 
                      function() {
-                         this.setButtons(buttons);
+                         this.setButtons([cancelButtonInfo, okButtonInfo]);
+
+                         let updateOkButtonEnabled = Lang.bind(this, function() {
+                             let sensitive = this._promptEntry.text.length > 0;
+                             okButtonInfo.button.reactive = sensitive;
+                             okButtonInfo.button.can_focus = sensitive;
+                         });
+
+                         updateOkButtonEnabled();
+
+                         this._promptEntryTextChangedId = this._promptEntry.clutter_text.connect('text-changed', updateOkButtonEnabled);
                      },
 
                      hold];
@@ -928,6 +939,11 @@ const LoginDialog = new Lang.Class({
     _hidePrompt: function() {
         this.setButtons([]);
 
+        if (this._promptEntryTextChangedId > 0) {
+            this._promptEntry.clutter_text.disconnect(this._promptEntryTextChangedId);
+            this._promptEntryTextChangedId = 0;
+        }
+
         let tasks = [function() {
                          return GdmUtil.fadeOutActor(this._promptBox);
                      },
index a902563f5e85cfa095d008d9b3df7d31a2f079b4..30699d9eb304069e96d8ad1f340866547be2539a 100644 (file)
@@ -151,6 +151,9 @@ const UnlockDialog = new Lang.Class({
         ShellEntry.addContextMenu(this._promptEntry, { isPassword: true });
         this.setInitialKeyFocus(this._promptEntry);
         this._promptEntry.clutter_text.connect('activate', Lang.bind(this, this._doUnlock));
+        this._promptEntry.clutter_text.connect('text-changed', Lang.bind(this, function() {
+            this._updateOkButtonSensitivity(this._promptEntry.text.length > 0);
+        }));
 
         this._promptLayout.add(this._promptEntry,
                                { expand: true,
@@ -203,6 +206,10 @@ const UnlockDialog = new Lang.Class({
     _updateSensitivity: function(sensitive) {
         this._promptEntry.reactive = sensitive;
         this._promptEntry.clutter_text.editable = sensitive;
+        this._updateOkButtonSensitivity(sensitive && this._promptEntry.text.length > 0);
+    },
+
+    _updateOkButtonSensitivity: function(sensitive) {
         this._okButton.button.reactive = sensitive;
         this._okButton.button.can_focus = sensitive;
     },